<?php
namespace app\admin\controller;
use think\Db;
use app\admin\model\Config as ConfigModel;

class Config extends Authentication
{   
/*
    //========
    //列表方法
    //========
    public function index()
    {
      //加载模块配置:默认分页条数
      define("PAGINATE_NUM",config('DEFAULT_PAGINATE_NUM'));
      
      //配置信息查询  
      $conf = Db::name('config')->paginate(PAGINATE_NUM);

      //模板参数赋值
      $this->assign('CONF',$conf);

      return $this->fetch();
    }
    //========
    //添加方法
    //========
    public function insert()
    {
        //判断表单是否Post传值
        if(request()->isPost()){
          
          $data=[       
            "name" =>input("name"),
            "name_cn" =>input("name_cn"),
            "option"=>input("option"),
            "value" =>input("value"),
            "type"  =>input("type"),
            "create_time"=>date("Y-m-d H:i:s",time()),
            "update_time"=>date("Y-m-d H:i:s",time()),
          ];
          
          //按照规则实例化验证器
          $validate = \think\Loader::validate('config');
          
          //验证器验证待插入数据
          if($validate->check($data)){
            
            //如果是单选字段类型的时候,可选值和当前值做包含比对
            if(0 ==input("type")){
              $elements = explode(",",$data["option"]);
              if(!in_array($data["value"], $elements)){
                return $this->error("可选值未含当前值,添加失败!");
              }
            }

            
            //插入数据            
            $db = Db::name('config')->insert($data);
            
            //判断插入结果            
            if($db){
              return $this->success("配置添加成功!",url('Config/index'));
            }else{
              return $this->error("配置添加失败!",url('Config/index'));
            }    
          }else{
            return $this->error($validate->getError());
          }
        }
        //如果是添加页面普通加载
        return $this->fetch('insert');
    }
    //========
    //编辑方法
    //========
    public function edit()
    {
        //判断表单是否Get传值
        if(request()->isPost()){
          $id = input('id');
          
          //获取更新数据
          $data=[
            "name" =>input("name"),
            "name_cn" =>input("name_cn"),
            "option"=>input("option"),
            "value" =>input("value"),
            "type"  =>input("type"),
          ];

          //按照规则实例化验证器
          $validate = \think\Loader::validate('Config');

          //验证器以编辑场景验证待更新数据
          if($validate->scene('edit')->check($data)){
          
            $res = Db::name('config')
                    ->where('id', $id)
                    ->update($data);
                    
            // 判断更新结果        
            if($res){
              return $this->success("配置更新成功!",url("Config/index"));
            }else{
               return $this->error("配置更新失败!");
            }
          }else{
            return $this->error($validate->getError());
          }
        }    
        //判断表单是否Get传值
        if(request()->isGet()){
          
          //获取友情链接ID
          $id = input('id');
          
          //助手函数查询友情链接记录
          $record = Db::name('config')->where('id',$id)->find();
          $this->assign('record',$record);
          
          //更新页面加载
          return $this->fetch('edit');          
        }
    }
    //==============
    //删除方法(单个)
    //==============
    public function delete()
    {
        //判断表单是否Get传值
        if(request()->isGet()){
          $id = input('id');
          
          // 通过助手函数根据主键删除
          if(Db::name('config')->delete($id)){
            return $this->success("配置项删除成功!");
          }else{
             return $this->error("配置项删除失败!");
          }
        }
    }
    //==============
    //删除方法(批量)
    //==============
    public function batch_delete()
    {
        //判断表单是否Post传值
        if(request()->isPost()){
          $id =\think\Request::instance()->param('id'); 
          
          //判断参数是否为空
          if(empty($id)){
            return $this->error("未选择内容");
          }
          
          //非空处理
          $id = join(",",$id);
          
          // 通过助手函数根据主键删除
          if(Db::name('config')->delete($id)){
            return $this->success("配置批量删除成功! ");
          }else{
             return $this->error("配置批量删除失败! ");
          }
        }
    }
    //=================
    //系统配置列表方法
    //=================
    public function clist()
    {
      //判断表单是否Get传值
      if(request()->isPost()){
        $Post = $_POST;
        
        $errors = array();
        $success = array();
        
        foreach($Post as $name=>$value){
          $res = Db::name('config')
                  ->where('name', $name)
                  ->update(['value' => $value]);
          //失败记录        
          if(!$res)$errors[]=$name;
          else $success[]=$name;
        }
        //如果修改过程有失败记录
        if($success){
            $msg = implode(',',$success);
            return $this->success("配置修改成功!",url('Config/index'));
        }else{
            $msg = implode(',',$errors);
            return $this->success("配置修改成功!",url('Config/index'));
        }
      }  
      $res = Db::name('config')->select();
      $this->assign("CLIST",$res);
      return $this->fetch();
    }
*/
    //============
    //网站信息管理
    //============
    
    //一.网站信息查询
    public function siteInfo()
    {
      //数据模型层类的静态方法获取站点信息
      $Config = ConfigModel::getSiteInfo();
      
      //模板参数赋值
      $this->assign("SITEINFO",$Config);
      
      //数据模型层类的静态方法获取站点信息
      $Contact = ConfigModel::getSiteContact();
      
      //模板参数赋值
      $this->assign("CONTACTINFO",$Contact);
      
      //返回站点信息页面
      return $this->fetch();
    }
    
    //二.网站信息保存
    public function saveSiteInfo()
    {
      //判断表单是否POST传值
      if(request()->isPost()){
        
        $Post = $_POST;
        
        $errors = array();
        $success = array();
        
        foreach($Post as $name=>$value){
          
          //1.数据库搜索配置项
          $res = Db::name('config')
                  ->where('name', $name)
                  ->find();
                  
          //2.数据库中无配置项则插入       
          if(!$res){
            
              //创建时间
              $time = date("Y-m-d H:i:s",time());
              
              //配置数据
              $data =  ['name'  => $name,
                        'value' => $value,
                        'create_time' => $time];

              //数据库插入          
              $insert = Db::name('config')
                      ->insert($data);
              
              //插入结果判断        
              if(!$insert){
                  $errors[]=$name;
               } else {
                  $success[]=$name;}
          }else{
            //2.存在时,更新记录
            $update = Db::name('config')
                    ->where('name', $name)
                    ->update(['value' => $value]);
                    
            //更新结果判断        
            if(!$update){
                $errors[]=$name;
              } else {
                $success[]=$name;}
          }
        }

        //如果修改过程没有失败记录,或者是因为未更改任何字段的情况下
        if($success||count($Post)==count($errors)){
            $msg = implode(',',$success);
            return $this->success("配置修改成功!",url('Config/siteInfo'));
        }else{
            $msg = implode(',',$errors);
            return $this->success("配置修改失败!",url('Config/siteInfo'));
        }
      }
    }
}    